System.Collections.Generic.HashSet<T> 类
本文提供了此 API 参考文档的补充说明。
该 HashSet<T> 类提供高性能集操作。 集是一个集合,其中包含不重复的元素,并且其元素没有特定顺序。
对象的容量 HashSet<T> 是对象可以保存的元素数。 随着 HashSet<T> 元素添加到对象中,对象的容量会自动增加。
该HashSet<T>类基于数学集的模型,并提供类似于访问或Hashtable集合键的Dictionary<TKey,TValue>高性能集操作。 简单而言, HashSet<T> 类可以视为 Dictionary<TKey,TValue> 没有值的集合。
HashSet<T>集合未排序,并且不能包含重复的元素。 如果顺序或元素重复比应用程序的性能更重要,请考虑将 List<T> 类与 Sort 该方法一起使用。
HashSet<T> 提供许多数学集运算,例如集加法(联合)和集减法。 下表列出了提供的 HashSet<T> 运算及其数学等效项。
HashSet 操作 | 数学等效项 |
---|---|
UnionWith | 联合或设置添加 |
IntersectWith | 交集 |
ExceptWith | 设置减法 |
SymmetricExceptWith | 对称差异 |
除了列出的集操作之外, HashSet<T> 该类还提供用于确定集相等性、重叠集以及集是另一组的子集还是超集的方法。
仅限 .NET Framework:对于非常大HashSet<T>的对象,可以通过将配置元素的属性<gcAllowVeryLargeObjects>
设置为enabled
true
在运行时环境中,将 64 位系统上的最大容量增加到 20 亿个元素。
HashSet<T> 类实现 ISet<T> 接口。
HashSet 和 LINQ 集操作
LINQ 提供对实现或接口的任何数据源的访问、Union
Intersect
设置操作和Except
设置操作。IQueryableIEnumerableDistinct
HashSet<T> 提供更大、更可靠的集操作集合。 例如, HashSet<T> 提供比较,例如 IsSubsetOf 和 IsSupersetOf。
LINQ 集操作和 HashSet<T> 操作之间的主要区别是 LINQ 集操作始终返回新 IEnumerable<T> 集合,而 HashSet<T> 等效方法修改当前集合。
通常,如果必须创建新集,或者应用程序只需要访问提供的集操作,则对任何集合或数组使用 LINQ 集操作 IEnumerable<T> 将足够。 但是,如果应用程序需要访问其他集操作,或者不需要或有必要创建新集合,请使用 HashSet<T> 该类。
下表显示了 HashSet<T> 操作及其等效的 LINQ 集操作。
HashSet 操作 | LINQ 等效项 |
---|---|
UnionWith | Union |
IntersectWith | Intersect |
ExceptWith | Except |
未提供。 | Distinct |
SymmetricExceptWith | 未提供。 |
Overlaps | 未提供。 |
IsSubsetOf | 未提供。 |
IsProperSubsetOf | 未提供。 |
IsSupersetOf | 未提供。 |
IsProperSupersetOf | 未提供。 |
SetEquals | 未提供。 |